﻿using CASFacturacion;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SistemaFacturacionWeb
{
    public partial class Formulario_web14 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //  Cargo fecha actual
            String ahora = DateTime.Now.ToString();
            this.TxtFecha.Text = ahora;

            //   cargo los subtotales
            ActualizarSubTotales();

        }


        private bool EstanLosCamposObligatoriosVacios()
        {
            String fecha = this.TxtFecha.Text;
            String idProducto = this.DropDownListProducto.SelectedValue;
            String idCliente = this.DropDownListCliente.SelectedValue;
            if (idProducto == "0") idProducto = null;
            if (idCliente == "0") idCliente = null;
            String cantidad = this.TxtCantidad.Text;

            return (String.IsNullOrEmpty(fecha) || String.IsNullOrEmpty(idProducto)
                || String.IsNullOrEmpty(idCliente) || String.IsNullOrEmpty(cantidad));
        }


        private bool FechaTieneFormatoValido()
        {
            Boolean respuestaADevolver = false;

            try
            {
                 DateTime fecha = Convert.ToDateTime(this.TxtFecha.Text);
                 respuestaADevolver = true;
            }
            catch (Exception)
            {

                respuestaADevolver = false;
            }

            return respuestaADevolver;
        }



        private bool CantidadEsUnNumeronatural()
        {

            Boolean respuestaADevolver = false;

            try
            {
                int cantidad = Convert.ToInt32(this.TxtCantidad.Text);
                if (cantidad > 0)
                {
                    respuestaADevolver = true;
                }
            }
            catch (Exception)
            {

                respuestaADevolver = false;
            }

            return respuestaADevolver;
        }



        



        private bool HayStockDelProducto()
        {
            int idProducto = Convert.ToInt32(DropDownListProducto.SelectedValue);
             return CADProducto.HayStockDelProductoConId(idProducto);
        }



        private void ActualizarSubTotales()
        {

            int subCantidadProductosEnChanguito = CADFacturaTemp.GetCantidadTotalProductosEnChanguito();
            Decimal subTotalAPagar = CADFacturaTemp.GetPrecioTotalAPagarPorTodoElChanguito();

            this.TxtTotalAPagar.Text = subTotalAPagar.ToString();
            this.TxtCantidadItems.Text = subCantidadProductosEnChanguito.ToString();
 
        }



        private void GuardarDetalleFacturaTemporalYaValidado()
        {

            int idProducto = Convert.ToInt32(DropDownListProducto.SelectedValue);
            int cantidad = Convert.ToInt32(this.TxtCantidad.Text);

            String descripcionProducto = CADProducto.GetDescipcionDeProductoConId(idProducto);
            Decimal precioProducto = CADProducto.GetPrecioDeProductoConId(idProducto);

            CADFacturaTemp.newFacturaTemp(idProducto, descripcionProducto, cantidad*precioProducto, cantidad);

            
        }

        



        private void LimpiarCampos()
        {
            //  no pues el cliente es fijo
            //this.DropDownListCliente.SelectedIndex = 0;

            this.DropDownListProducto.SelectedIndex = 0;

            this.TxtCantidad.Text = "";
            
        }


        protected void BtnAgregar_Click(object sender, EventArgs e)
        {

            if (EstanLosCamposObligatoriosVacios())
            {
                this.LabelMensajeAltaFactura.Text = "Complete todos los campos obligatorios.";
                return;
            }

            if (!FechaTieneFormatoValido())
            {
                this.LabelMensajeAltaFactura.Text = "Ingrese formato de fecha valido.";
                return;
            }

            if (!CantidadEsUnNumeronatural())
            {
                this.LabelMensajeAltaFactura.Text = "La cantidad debe ser al menos uno.";
                return;
            }

            if (!HayStockDelProducto())
            {
                this.LabelMensajeAltaFactura.Text = "Lo sentimos. No hay mas stock del producto.";
                return;
            }
            
            
            GuardarDetalleFacturaTemporalYaValidado();
            this.LabelMensajeAltaFactura.Text = "Compra agregada al changuito Ok.";
            this.GridViewFacturaTmp.DataBind();

            ActualizarSubTotales();
            LimpiarCampos();

        }

        

        

        

        

        

        

        protected void BtnGuardar_Click(object sender, EventArgs e)
        {
            String idCliente = this.DropDownListCliente.SelectedValue;
            String fecha = this.TxtFecha.Text;

            DateTime fechaDate = Convert.ToDateTime(this.TxtFecha.Text);

            int a = 0;

            //  Grabamos encabezado d efactura
            int idFactura = CADFactura.newFactura(idCliente, DateTime.Now);

            //gRABAMOS EL DETALLE
            DataSetFacturacion.DetalleFacturaTmpDataTable miDetalle = CADFacturaTemp.getData();

            foreach (DataRow miRegistro in miDetalle)
	        {
                DetalleFactura.NewDetalleFactura( idFactura, (int)miRegistro.ItemArray[1], 
                    (String)miRegistro.ItemArray[2], (Decimal)miRegistro.ItemArray[3], 
                    (int)miRegistro.ItemArray[4] );
	        }

            //  Borro la tabla temporal
            CADFacturaTemp.BorrarTodo();



            
        }
    }
}